case GDK_DRAG_LEAVE:
if (info->widget)
{
+ g_object_remove_weak_pointer (G_OBJECT (info->widget), (gpointer *) &info->widget);
gtk_drag_dest_leave (info->widget, context, event->dnd.time);
info->widget = NULL;
}
*/
if (info->widget)
{
+ g_object_remove_weak_pointer (G_OBJECT (info->widget), (gpointer *) &info->widget);
gtk_drag_dest_leave (info->widget, context, event->dnd.time);
info->widget = NULL;
}
if (info->widget && !found)
{
+ g_object_remove_weak_pointer (G_OBJECT (info->widget), (gpointer *) &info->widget);
gtk_drag_dest_leave (info->widget, context, event->dnd.time);
info->widget = NULL;
}
found = callback (widget, context, x, y, time);
/* If so, send a "drag-leave" to the last widget */
- if (found)
+ if (found && info->widget != widget)
{
- if (info->widget && info->widget != widget)
+ if (info->widget)
{
+ g_object_remove_weak_pointer (G_OBJECT (info->widget), (gpointer *) &info->widget);
gtk_drag_dest_leave (info->widget, context, time);
}
static void
gtk_drag_dest_info_destroy (gpointer data)
{
+ GtkDragDestInfo *info = (GtkDragDestInfo *)data;
+ if (info->widget)
+ {
+ g_object_remove_weak_pointer (G_OBJECT (info->widget), (gpointer *) &info->widget);
+ }
g_slice_free (GtkDragDestInfo, data);
}